#include "list_msg.h"

int list_msg_init(char *path)
{
    int msgid;
    key_t list_msg_key;

    list_msg_key =  ftok(path, 'a');

    msgid = msgget(list_msg_key, 0);
    if (-1 != msgid){
        printf("REMOVE msgid %d:%d\n", msgid, msgctl(msgid, IPC_RMID, NULL));
    }
    msgid = msgget(list_msg_key, IPC_EXCL | IPC_CREAT | 0666);
    if (-1 == msgid) {
        printf("Error when msgget:%s", strerror(errno));
        exit(0);
    }
    return msgid;
}

int list_read_msg(int msgid, void *msg, size_t sz, int type, int wait)
{
    int ret;
    if (wait) {
        ret = msgrcv(msgid, (void *)msg, sz - sizeof(long), type, 0);
    } else {
        ret = msgrcv(msgid, (void *)msg, sz - sizeof(long), type, IPC_NOWAIT);
    }

    return ret;
}

int list_write_msg(int msgid, void *msg, size_t sz)
{
    return msgsnd(msgid, (void *)msg, sz - sizeof(long), 0);
}

